ãžã§ãã¬ãŒã¿ãŒé¢æ°ã§éåæJavaScriptããã¹ã¿ãŒãè€æ°ã®ãžã§ãã¬ãŒã¿ãŒãåæã»é£æºãããé«åºŠãªãã¯ããã¯ãåŠã³ãã¯ãªãŒã³ã§ç®¡çããããéåæã¯ãŒã¯ãããŒãå®çŸããŸãã
JavaScriptãžã§ãã¬ãŒã¿ãŒé¢æ°ã®éåæåæïŒè€æ°ãžã§ãã¬ãŒã¿ãŒã®é£æº
JavaScriptã®ãžã§ãã¬ãŒã¿ãŒé¢æ°ã¯ãéåæåŠçãããåæçã«èŠããæ¹æ³ã§æ±ãããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸãããžã§ãã¬ãŒã¿ãŒã®åºæ¬çãªäœ¿ãæ¹ã¯ããç¥ãããŠããŸããããã®çã®ããã³ã·ã£ã«ã¯ãç¹ã«è€æ°ã®éåæããŒã¿ã¹ããªãŒã ãæ±ãéã«ãããããåæã飿ºãããèœåã«ãããŸãããã®èšäºã§ã¯ãéåæåæãçšããŠè€æ°ãžã§ãã¬ãŒã¿ãŒã®é£æºãå®çŸããããã®é«åºŠãªãã¯ããã¯ãæãäžããŸãã
ãžã§ãã¬ãŒã¿ãŒé¢æ°ã®çè§£
åæã«ã€ããŠæãäžããåã«ããžã§ãã¬ãŒã¿ãŒé¢æ°ãšã¯äœãããããŠã©ã®ããã«åäœããã®ããç°¡åã«ããããããŸãããã
ãžã§ãã¬ãŒã¿ãŒé¢æ°ã¯function*æ§æãçšããŠå®£èšãããŸããéåžžã®é¢æ°ãšã¯ç°ãªãããžã§ãã¬ãŒã¿ãŒé¢æ°ã¯å®è¡äžã«äžæåæ¢ããã³åéãå¯èœã§ããyieldããŒã¯ãŒãã¯é¢æ°ãäžæåæ¢ããå€ãè¿ãããã«äœ¿çšãããŸãããžã§ãã¬ãŒã¿ãŒãåéããããšïŒnext()ã䜿çšããŠïŒãå®è¡ã¯äžæãããå Žæããç¶ç¶ãããŸãã
以äžã«ç°¡åãªäŸã瀺ããŸãïŒ
function* numberGenerator() {
yield 1;
yield 2;
yield 3;
}
const generator = numberGenerator();
console.log(generator.next()); // Output: { value: 1, done: false }
console.log(generator.next()); // Output: { value: 2, done: false }
console.log(generator.next()); // Output: { value: 3, done: false }
console.log(generator.next()); // Output: { value: undefined, done: true }
éåæãžã§ãã¬ãŒã¿ãŒ
éåæåŠçãæ±ãããã«ãasync function*æ§æã§å®£èšãããéåæãžã§ãã¬ãŒã¿ãŒã䜿çšã§ããŸãããããã®ãžã§ãã¬ãŒã¿ãŒã¯Promiseãawaitããããšãã§ããéåæã³ãŒããããçŽç·çã§èªã¿ãããã¹ã¿ã€ã«ã§èšè¿°ããããšãå¯èœã«ããŸãã
äŸïŒ
async function* fetchUsers(userIds) {
for (const userId of userIds) {
const response = await fetch(`https://api.example.com/users/${userId}`);
const user = await response.json();
yield user;
}
}
async function main() {
const userIds = [1, 2, 3];
const userGenerator = fetchUsers(userIds);
for await (const user of userGenerator) {
console.log(user);
}
}
main();
ãã®äŸã§ã¯ãfetchUsersã¯æäŸãããåuserIdã«å¯ŸããŠAPIãããŠãŒã¶ãŒããŒã¿ããã§ããããéåæãžã§ãã¬ãŒã¿ãŒã§ããfor await...ofã«ãŒãã¯éåæãžã§ãã¬ãŒã¿ãŒãå埩åŠçããããã«äœ¿çšãããåŠçããåã«åyieldãããå€ãåŸ
æ©ããŸãã
è€æ°ãžã§ãã¬ãŒã¿ãŒé£æºã®å¿ èŠæ§
å€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¯è€æ°ã®éåæããŒã¿ãœãŒã¹ãåŠçã¹ãããéã®é£æºãå¿ èŠãšããŸããäŸãã°ã以äžã®ãããªã±ãŒã¹ãèããããŸãïŒ
- è€æ°ã®APIããåæã«ããŒã¿ããã§ããããã
- ãããããå¥ã®ãžã§ãã¬ãŒã¿ãŒã«ãã£ãŠå®è¡ãããäžé£ã®å€æãéããŠããŒã¿ãåŠçããã
- è€æ°ã®éåææäœã«ãŸããããšã©ãŒãäŸå€ãåŠçããã
- æ¡ä»¶ä»ãå®è¡ããã¡ã³ã¢ãŠã/ãã¡ã³ã€ã³ãã¿ãŒã³ã®ãããªè€éãªå¶åŸ¡ãããŒããžãã¯ãå®è£ ããã
ã³ãŒã«ããã¯ãPromiseãªã©ã®åŸæ¥ã®éåæããã°ã©ãã³ã°æè¡ã¯ããããã®ã·ããªãªã§ã¯ç®¡çãé£ãããªãããšããããŸãããžã§ãã¬ãŒã¿ãŒé¢æ°ã¯ãããæ§é åãããåæå¯èœãªã¢ãããŒããæäŸããŸãã
è€æ°ãžã§ãã¬ãŒã¿ãŒé£æºã®ãã¯ããã¯
è€æ°ã®ãžã§ãã¬ãŒã¿ãŒé¢æ°ã飿ºãããããã®ããã€ãã®ãã¯ããã¯ã玹ä»ããŸãïŒ
1. yield*ã«ãããžã§ãã¬ãŒã¿ãŒã®åæ
yield*ããŒã¯ãŒãã¯ãå¥ã®ã€ãã¬ãŒã¿ãŒããžã§ãã¬ãŒã¿ãŒé¢æ°ã«åŠçãå§è²ããããšãå¯èœã«ããŸããããã¯ãžã§ãã¬ãŒã¿ãŒãåæããããã®åºæ¬çãªæ§æèŠçŽ ã§ããå§è²ããããžã§ãã¬ãŒã¿ãŒã®åºåããçŸåšã®ãžã§ãã¬ãŒã¿ãŒã®åºåã¹ããªãŒã ã«å¹æçã«ããã©ããåãããŸãã
äŸïŒ
async function* generatorA() {
yield 1;
yield 2;
}
async function* generatorB() {
yield 3;
yield 4;
}
async function* combinedGenerator() {
yield* generatorA();
yield* generatorB();
}
async function main() {
for await (const value of combinedGenerator()) {
console.log(value); // Output: 1, 2, 3, 4
}
}
main();
ãã®äŸã§ã¯ãcombinedGeneratorã¯ãŸãgeneratorAã®ãã¹ãŠã®å€ãyieldããæ¬¡ã«generatorBã®ãã¹ãŠã®å€ãyieldããŸããããã¯åçŽãªåœ¢åŒã®é次çãªåæã§ãã
2. Promise.allã«ãã䞊è¡å®è¡
è€æ°ã®ãžã§ãã¬ãŒã¿ãŒã䞊è¡ããŠå®è¡ããã«ã¯ãããããPromiseã§ã©ããããPromise.allã䜿çšããŸããããã«ãããè€æ°ã®ãœãŒã¹ãã䞊è¡ããŠããŒã¿ããã§ããããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
äŸïŒ
async function* fetchUserData(userId) {
const response = await fetch(`https://api.example.com/users/${userId}`);
const user = await response.json();
yield user;
}
async function* fetchPosts(userId) {
const response = await fetch(`https://api.example.com/users/${userId}/posts`);
const posts = await response.json();
for (const post of posts) {
yield post;
}
}
async function* combinedGenerator(userId) {
const userDataPromise = fetchUserData(userId).next();
const postsPromise = fetchPosts(userId).next();
const [userDataResult, postsResult] = await Promise.all([userDataPromise, postsPromise]);
if (userDataResult.value) {
yield { type: 'user', data: userDataResult.value };
}
if (postsResult.value) {
yield { type: 'posts', data: postsResult.value };
}
}
async function main() {
for await (const item of combinedGenerator(1)) {
console.log(item);
}
}
main();
ãã®äŸã§ã¯ãcombinedGeneratorã¯Promise.allã䜿çšããŠãŠãŒã¶ãŒããŒã¿ãšæçš¿ã䞊è¡ããŠãã§ããããŸãããã®åŸãçµæãããŒã¿ãœãŒã¹ã瀺ãtypeããããã£ãæã€å¥ã
ã®ãªããžã§ã¯ããšããŠyieldããŸãã
éèŠãªèæ
®äºé
ïŒfor await...ofã§å埩åŠçããåã«ãžã§ãã¬ãŒã¿ãŒã§.next()ã䜿çšãããšãã€ãã¬ãŒã¿ãŒã*äžåºŠ*é²ã¿ãŸããããã¯ããžã§ãã¬ãŒã¿ãŒã®å®è¡ãå
å¶çã«éå§ãããããPromise.allãšãžã§ãã¬ãŒã¿ãŒãçµã¿åãããŠäœ¿çšããéã«çè§£ããŠããããšãéåžžã«éèŠã§ãã
3. ãã¡ã³ã¢ãŠã/ãã¡ã³ã€ã³ãã¿ãŒã³
ãã¡ã³ã¢ãŠã/ãã¡ã³ã€ã³ãã¿ãŒã³ã¯ãè€æ°ã®ã¯ãŒã«ãŒã«äœæ¥ã忣ãããã®çµæãéçŽããããã®äžè¬çãªãã¿ãŒã³ã§ãããžã§ãã¬ãŒã¿ãŒé¢æ°ã䜿çšãããšããã®ãã¿ãŒã³ã广çã«å®è£ ã§ããŸãã
ãã¡ã³ã¢ãŠãïŒã¿ã¹ã¯ãè€æ°ã®ãžã§ãã¬ãŒã¿ãŒã«åæ£ããããšã
ãã¡ã³ã€ã³ïŒè€æ°ã®ãžã§ãã¬ãŒã¿ãŒããçµæãåéããããšã
äŸïŒ
async function* worker(taskId) {
// Simulate asynchronous work
await new Promise(resolve => setTimeout(resolve, Math.random() * 1000));
yield { taskId, result: `Result for task ${taskId}` };
}
async function* fanOut(taskIds, numWorkers) {
const workerGenerators = [];
for (let i = 0; i < numWorkers; i++) {
workerGenerators.push(worker(taskIds[i % taskIds.length])); // Round-robin assignment
}
for (let i = 0; i < taskIds.length; i++) {
yield* workerGenerators[i % numWorkers];
}
}
async function main() {
const taskIds = [1, 2, 3, 4, 5, 6, 7, 8];
const numWorkers = 3;
for await (const result of fanOut(taskIds, numWorkers)) {
console.log(result);
}
}
main();
ãã®äŸã§ã¯ãfanOutã¯ã¿ã¹ã¯ïŒworkerã«ãã£ãŠã·ãã¥ã¬ãŒããããïŒãåºå®æ°ã®ã¯ãŒã«ãŒã«åæ£ããŸããã©ãŠã³ãããã³å²ãåœãŠã«ãããäœæ¥ãæ¯èŒçã«åçã«åæ£ãããŸãããã®åŸãçµæã¯fanOutãžã§ãã¬ãŒã¿ãŒããyieldãããŸãããã®åçŽãªäŸã§ã¯ãã¯ãŒã«ãŒã¯çã«äžŠè¡ããŠå®è¡ãããããã§ã¯ãªãããšã«æ³šæããŠãã ãããyield*ã¯fanOutå
ã§ã®é次å®è¡ã匷å¶ããŸãã
4. ãžã§ãã¬ãŒã¿ãŒéã®ã¡ãã»ãŒãžããã·ã³ã°
ãžã§ãã¬ãŒã¿ãŒã¯ãnext()ã¡ãœããã䜿çšããŠå€ãããåãããããšã§äºãã«éä¿¡ã§ããŸãããžã§ãã¬ãŒã¿ãŒã§next(value)ãåŒã³åºããšããã®valueããžã§ãã¬ãŒã¿ãŒå
éšã®yieldåŒã«æž¡ãããŸãã
äŸïŒ
async function* producer() {
let message = 'Initial Message';
while (true) {
const received = yield message;
console.log(`Producer received: ${received}`);
message = `Producer's response to: ${received}`;
await new Promise(resolve => setTimeout(resolve, 500)); // Simulate some work
}
}
async function* consumer(producerGenerator) {
let message = 'Consumer starting';
let result = await producerGenerator.next();
console.log(`Consumer received from producer: ${result.value}`);
while (!result.done) {
const response = `Consumer's message: ${message}`; // Create a response
result = await producerGenerator.next(response); // Send message to producer
if (!result.done) {
console.log(`Consumer received from producer: ${result.value}`); // log the response from the producer
}
message = `Next consumer message`; // Create next message to send on next iteration
await new Promise(resolve => setTimeout(resolve, 500)); // Simulate some work
}
}
async function main() {
const prod = producer();
await consumer(prod);
}
main();
ãã®äŸã§ã¯ãconsumerã¯producerGenerator.next(response)ã䜿çšããŠproducerã«ã¡ãã»ãŒãžãéä¿¡ããproducerã¯yieldåŒã䜿çšããŠãããã®ã¡ãã»ãŒãžãåãåããŸããããã«ããããžã§ãã¬ãŒã¿ãŒéã®åæ¹åéä¿¡ãå¯èœã«ãªããŸãã
5. ãšã©ãŒãã³ããªã³ã°
éåæãžã§ãã¬ãŒã¿ãŒã®åæã«ããããšã©ãŒãã³ããªã³ã°ã«ã¯ãæ
éãªæ€èšãå¿
èŠã§ãããžã§ãã¬ãŒã¿ãŒå
ã§try...catchãããã¯ã䜿çšããŠãéåææäœäžã«çºçãããšã©ãŒãåŠçã§ããŸãã
äŸïŒ
async function* safeFetch(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
yield data;
} catch (error) {
console.error(`Error fetching data from ${url}: ${error}`);
yield { error: error.message, url }; // Yield an error object
}
}
async function main() {
const generator = safeFetch('https://api.example.com/data'); // Replace with an actual URL, but make sure it exists to test
for await (const result of generator) {
if (result.error) {
console.log(`Failed to fetch data from ${result.url}: ${result.error}`);
} else {
console.log('Fetched data:', result);
}
}
}
main();
ãã®äŸã§ã¯ãsafeFetchãžã§ãã¬ãŒã¿ãŒã¯fetchæäœäžã«çºçãããšã©ãŒããã£ãããããšã©ãŒãªããžã§ã¯ããyieldããŸããåŒã³åºãå
ã®ã³ãŒãã¯ããšã©ãŒã®ååšã確èªããããã«å¿ããŠåŠçããããšãã§ããŸãã
å®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹
以äžã«ãè€æ°ãžã§ãã¬ãŒã¿ãŒã®é£æºãæçãšãªãå®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹ãããã€ã瀺ããŸãïŒ
- ããŒã¿ã¹ããªãŒãã³ã°ïŒãžã§ãã¬ãŒã¿ãŒã䜿çšããŠå€§èŠæš¡ãªããŒã¿ã»ããããã£ã³ã¯ã§åŠçããè€æ°ã®ãžã§ãã¬ãŒã¿ãŒãããŒã¿ã¹ããªãŒã ã«å¯ŸããŠç°ãªã倿ã䞊è¡ããŠå®è¡ããŸããéåžžã«å€§ããªãã°ãã¡ã€ã«ãåŠçããå Žåãæ³åããŠã¿ãŠãã ããããããžã§ãã¬ãŒã¿ãŒããã¡ã€ã«ãèªã¿åããå¥ã®ãžã§ãã¬ãŒã¿ãŒãåè¡ãè§£æãã3çªç®ã®ãžã§ãã¬ãŒã¿ãŒãçµ±èšãéèšããããšãã£ãå ·åã§ãã
- ãªã¢ã«ã¿ã€ã ããŒã¿åŠçïŒã»ã³ãµãŒãæ ªäŸ¡è¡šç€ºãªã©ã®è€æ°ã®ãœãŒã¹ããã®ãªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ãæ±ãããžã§ãã¬ãŒã¿ãŒã䜿çšããŠããŒã¿ããã£ã«ã¿ãªã³ã°ã倿ãéçŽããŸãã
- ãã€ã¯ããµãŒãã¹ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ïŒãžã§ãã¬ãŒã¿ãŒã䜿çšããŠè€æ°ã®ãã€ã¯ããµãŒãã¹ãžã®åŒã³åºãã調æŽããåãžã§ãã¬ãŒã¿ãŒãç°ãªããµãŒãã¹ãžã®åŒã³åºãã衚ããŸããããã«ãããè€æ°ã®ãµãŒãã¹éã®çžäºäœçšãå«ãè€éãªã¯ãŒã¯ãããŒãç°¡çŽ åã§ããŸããäŸãã°ãeã³ããŒã¹ã®æ³šæåŠçã·ã¹ãã ã«ã¯ã決æžãµãŒãã¹ãåšåº«ãµãŒãã¹ãé éãµãŒãã¹ãžã®åŒã³åºããå«ãŸããå ŽåããããŸãã
- ã²ãŒã éçºïŒãžã§ãã¬ãŒã¿ãŒã䜿çšããŠè€éãªã²ãŒã ããžãã¯ãå®è£ ããAIãç©çæŒç®ãã¬ã³ããªã³ã°ãªã©ãã²ãŒã ã®ããŸããŸãªåŽé¢ãè€æ°ã®ãžã§ãã¬ãŒã¿ãŒã§å¶åŸ¡ããŸãã
- ETLïŒæœåºã倿ãããŒãïŒããã»ã¹ïŒãžã§ãã¬ãŒã¿ãŒé¢æ°ã䜿çšããŠETLãã€ãã©ã€ã³ãå¹çåããæ§ã ãªãœãŒã¹ããããŒã¿ãæœåºããç®çã®åœ¢åŒã«å€æããŠãã¿ãŒã²ããã®ããŒã¿ããŒã¹ãããŒã¿ãŠã§ã¢ããŠã¹ã«ããŒãããŸããåã¹ãããïŒæœåºã倿ãããŒãïŒã¯å¥ã ã®ãžã§ãã¬ãŒã¿ãŒãšããŠå®è£ ã§ããã¢ãžã¥ãŒã«åãããåå©çšå¯èœãªã³ãŒããå®çŸã§ããŸãã
éåæåæã«ãžã§ãã¬ãŒã¿ãŒé¢æ°ã䜿çšããå©ç¹
- å¯èªæ§ã®åäžïŒãžã§ãã¬ãŒã¿ãŒã§æžãããéåæã³ãŒãã¯ãã³ãŒã«ããã¯ãPromiseã§æžãããã³ãŒããããèªã¿ããããçè§£ãããããªããŸãã
- ãšã©ãŒãã³ããªã³ã°ã®ç°¡çŽ åïŒãžã§ãã¬ãŒã¿ãŒé¢æ°ã¯ã
try...catchãããã¯ã䜿çšããŠéåææäœäžã«çºçãããšã©ãŒããã£ããã§ããããããšã©ãŒãã³ããªã³ã°ãç°¡çŽ åãããŸãã - åæå¯èœæ§ã®åäžïŒãžã§ãã¬ãŒã¿ãŒé¢æ°ã¯åæå¯èœæ§ãéåžžã«é«ããè€æ°ã®ãžã§ãã¬ãŒã¿ãŒãç°¡åã«çµã¿åãããŠè€éãªéåæã¯ãŒã¯ãããŒãäœæã§ããŸãã
- ä¿å®æ§ã®åäžïŒãžã§ãã¬ãŒã¿ãŒé¢æ°ã®ã¢ãžã¥ãŒã«æ§ãšåæå¯èœæ§ã«ãããã³ãŒãã®ä¿å®ãšæŽæ°ã容æã«ãªããŸãã
- ãã¹ãã®ããããã®åäžïŒãžã§ãã¬ãŒã¿ãŒé¢æ°ã¯ãå®è¡ãããŒãç°¡åã«å¶åŸ¡ããéåææäœãã¢ãã¯ã§ãããããã³ãŒã«ããã¯ãPromiseã§æžãããã³ãŒãããããã¹ãã容æã§ãã
課é¡ãšèæ ®äºé
- åŠç¿æ²ç·ïŒãžã§ãã¬ãŒã¿ãŒé¢æ°ã¯ãåŸæ¥ã®éåæããã°ã©ãã³ã°æè¡ãããçè§£ãè€éã«ãªãå ŽåããããŸãã
- ãããã°ïŒéåæãžã§ãã¬ãŒã¿ãŒã®åæã®ãããã°ã¯ãå®è¡ãããŒã远跡ããã®ãé£ãããããå°é£ãªå ŽåããããŸããåªãããã®ã³ã°ãã©ã¯ãã£ã¹ã䜿çšããããšãéèŠã§ãã
- ããã©ãŒãã³ã¹ïŒãžã§ãã¬ãŒã¿ãŒã¯å¯èªæ§ã®å©ç¹ãæäŸããŸããã誀ã£ã䜿çšã¯ããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã€ãªããå¯èœæ§ããããŸããç¹ã«ããã©ãŒãã³ã¹ãéèŠãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããžã§ãã¬ãŒã¿ãŒéã®ã³ã³ããã¹ãã¹ã€ããã®ãªãŒããŒãããã«æ³šæããŠãã ããã
- ãã©ãŠã¶ãµããŒãïŒçŸä»£ã®ãã©ãŠã¶ã¯äžè¬çã«ãžã§ãã¬ãŒã¿ãŒé¢æ°ãååã«ãµããŒãããŠããŸãããå¿ èŠã«å¿ããŠå€ããã©ãŠã¶ãšã®äºææ§ã確èªããŠãã ããã
- ãªãŒããŒãããïŒãžã§ãã¬ãŒã¿ãŒã¯ãã³ã³ããã¹ãã¹ã€ããã®ãããåŸæ¥ã®async/awaitãšæ¯èŒããŠããããªãªãŒããŒãããããããŸããã¢ããªã±ãŒã·ã§ã³ã§ããã©ãŒãã³ã¹ãéèŠãªå Žåã¯ã枬å®ãè¡ã£ãŠãã ããã
ãã¹ããã©ã¯ãã£ã¹
- ãžã§ãã¬ãŒã¿ãŒãå°ãããçŠç¹ãçµãïŒåãžã§ãã¬ãŒã¿ãŒã¯ãåäžã®æç¢ºã«å®çŸ©ãããã¿ã¹ã¯ãå®è¡ããããã«ããŸããããã«ãããå¯èªæ§ãšä¿å®æ§ãåäžããŸãã
- 説æçãªååã䜿çšããïŒãžã§ãã¬ãŒã¿ãŒé¢æ°ã倿°ã«ã¯ãæç¢ºã§èª¬æçãªååã䜿çšããŸãã
- ã³ãŒããææžåããïŒåãžã§ãã¬ãŒã¿ãŒã®ç®çãä»ã®ãžã§ãã¬ãŒã¿ãŒãšã®çžäºäœçšã説æãããªã©ãã³ãŒãã培åºçã«ææžåããŸãã
- ã³ãŒãããã¹ãããïŒåäœãã¹ããçµåãã¹ããå«ããã³ãŒãã培åºçã«ãã¹ãããŸãã
- ãªã³ã¿ãŒãšã³ãŒããã©ãŒããã¿ãŒã䜿çšããïŒãªã³ã¿ãŒãšã³ãŒããã©ãŒããã¿ãŒã䜿çšããŠãã³ãŒãã®äžè²«æ§ãšå質ã確ä¿ããŸãã
- ã©ã€ãã©ãªã®äœ¿çšãæ€èšããïŒcoãiter-toolsãªã©ã®ã©ã€ãã©ãªã¯ããžã§ãã¬ãŒã¿ãŒãæ±ãããã®ãŠãŒãã£ãªãã£ãæäŸããäžè¬çãªã¿ã¹ã¯ãç°¡çŽ åã§ããŸãã
çµè«
JavaScriptã®ãžã§ãã¬ãŒã¿ãŒé¢æ°ã¯ãéåæããã°ã©ãã³ã°æè¡ãšçµã¿åãããããšã§ãè€éãªéåæã¯ãŒã¯ãããŒã管çããããã®åŒ·åã§æè»ãªã¢ãããŒããæäŸããŸããè€æ°ã®ãžã§ãã¬ãŒã¿ãŒãåæã飿ºããããã¯ããã¯ãç¿åŸããããšã§ãããã¯ãªãŒã³ã§ã管çãããããä¿å®æ§ã®é«ãã³ãŒããäœæã§ããŸããæ³šæãã¹ã課é¡ãèæ ®äºé ã¯ãããŸãããç¹ã«è€æ°ã®éåæããŒã¿ãœãŒã¹ãåŠçã¹ãããéã®é£æºãå¿ èŠãªè€éãªã¢ããªã±ãŒã·ã§ã³ã«ãããŠãéåæåæã«ãžã§ãã¬ãŒã¿ãŒé¢æ°ã䜿çšããå©ç¹ã¯ããã°ãã°æ¬ ç¹ãäžåããŸãããã®èšäºã§èª¬æãããã¯ããã¯ã詊ããèªèº«ã®ãããžã§ã¯ãã§è€æ°ãžã§ãã¬ãŒã¿ãŒé£æºã®åãçºèŠããŠãã ããã